import {objConvert, SimpleTypeConst} from "st-common-core"
import {decryptAnyByTripleDes, DesTripleHeaderNameConst} from "st-common-encrypt"
import {AxiosFulfilledHandlerHeadersPropType, ResType} from 'st-common-req'
import {getEnv} from "@env"
import {EnvNameEnum} from '@config'
import {useDesStore} from "../stores/des-store.ts"

/**
 * 解密响应结果数据处理函数
 *
 * @param {ResResultType} res 请求响应结果
 * @param {} headers 响应头
 * @returns {ResResultType} 解密处理后的响应结果
 */
export const decryptResDataHandler = (
  res: ResType,
  headers: AxiosFulfilledHandlerHeadersPropType
): ResType => {
  // 如果在环境变量中配置关闭了对响应结果数据的加密相关操作
  if (!getEnv<boolean>(EnvNameEnum.RES_DATA_IS_ENCRYPT, SimpleTypeConst.BOOL)) return res
  // 获取密钥
  let key = useDesStore().getKey(headers[DesTripleHeaderNameConst.KEY.toLowerCase()])
  // 密钥获取失败、响应结果数据为空、对于响应结果无需进行解密
  if (!key || !res.data || !res.isEncrypt) return res
  // 对响应结果数据进行解密
  objConvert<ResType>(decryptAnyByTripleDes({
    secretData: res,
    key,
  }), res)
  return res
}
